objs.m <- MapObjects(objs.i[["Mouse"]], objs.i[["Opossum"]], c("subclass", "type"), assay = "integrated")
Warning: Both reference and query assays have been processed with SCTransform.Setting normalization.method = 'SCT' and continuing.Normalizing query using reference SCT model
Projecting cell embeddings
Finding neighborhoods
Finding anchors
Found 224 anchors
Filtering anchors
Retained 48 anchors
Finding integration vectors
Finding integration vector weights
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Predicting cell labels
Predicting cell labels
Warning: Feature names cannot have underscores ('_'), replacing with dashes ('-')
| | 0 % ~calculating
Integrating dataset 2 with reference dataset
Warning: Number of anchors is less than k.weight. Lowering k.weight for sample pair.Finding integration vectors
Integrating data
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s
Computing nearest neighbors
Running UMAP projection
10:14:19 Read 7123 rows
10:14:19 Processing block 1 of 1
10:14:19 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
10:14:20 Initializing by weighted average of neighbor coordinates using 1 thread
10:14:20 Commencing optimization for 167 epochs, with 213690 positive edges
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
10:14:25 Finished
Warning: Both reference and query assays have been processed with SCTransform.Setting normalization.method = 'SCT' and continuing.Normalizing query using reference SCT model
Projecting cell embeddings
Finding neighborhoods
Finding anchors
Found 298 anchors
Filtering anchors
Retained 69 anchors
Finding integration vectors
Finding integration vector weights
Error in idx[i, ] <- res[[i]][[1]] :
number of items to replace is not a multiple of replacement length
obj.mouse <- ClusterSCT(obj.mouse, c(1))
obj.m.mouse <- ClusterSCT(obj.m.mouse, c(1))
obj.opossum <- ClusterSCT(obj.opossum, c(1))
obj.m.opossum <- ClusterSCT(obj.m.opossum, c(1))
obj.mouse <- readRDS("E:/Transcriptomics_V1/Integration/Opossum_Mouse-P38/obj_mouse.rds")
Loading required package: SeuratObject
Loading required package: sp
obj.opossum <- readRDS("E:/Transcriptomics_V1/Integration/Opossum_Mouse-P38/obj_opossum.rds")
objs.i.mouse <- readRDS("E:/Transcriptomics_V1/Integration/Opossum_Mouse-P38/obj_i_mouse.rds")
objs.i.opossum <- readRDS("E:/Transcriptomics_V1/Integration/Opossum_Mouse-P38/obj_i_opossum.rds")
DimPlot(obj.mouse, reduction = "umap", group.by = "sample", label = FALSE, raster = FALSE, shuffle = TRUE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.mouse, reduction = "umap", group.by = "subclass", label = TRUE, repel = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.mouse, reduction = "umap", group.by = "type", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
obj.mouse$subclass.IT <- obj.mouse$subclass
obj.mouse$subclass.IT[obj.mouse$subclass %in% c("L2/3", "L4", "L5IT", "L6IT")] <- "IT"
p <- DimPlot(obj.mouse, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_Subclass_FullSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_Subclass_FullSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
p <- DimPlot(obj.mouse, reduction = "umap", group.by = "subclass.IT", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_SubclassIT_FullSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_SubclassIT_FullSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image

DimPlot(obj.m.mouse, reduction = "umap", group.by = "sample", label = FALSE, raster = FALSE, shuffle = TRUE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.mouse, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.mouse, reduction = "umap", group.by = "predicted.subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.mouse, reduction = "umap", group.by = "type", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
p <- DimPlot(obj.m.mouse, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_Subclass_IntSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_Subclass_IntSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
p <- DimPlot(obj.m.mouse, reduction = "umap", group.by = "predicted.subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_PredictedSubclass_IntSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_PredictedSubclass_IntSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image

DimPlot(obj.opossum, reduction = "umap", group.by = "sample", label = FALSE, raster = FALSE, shuffle = TRUE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.opossum, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.opossum, reduction = "umap", group.by = "type", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
obj.opossum$subclass.IT <- obj.opossum$subclass
obj.opossum$subclass.IT[obj.opossum$subclass %in% c("IT_A", "IT_B", "IT_C", "IT_D", "IT_E")] <- "IT"
p <- DimPlot(obj.opossum, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_Subclass_FullSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_Subclass_FullSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
p <- DimPlot(obj.opossum, reduction = "umap", group.by = "subclass.IT", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_SubclassIT_FullSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_SubclassIT_FullSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image



DimPlot(obj.m.opossum, reduction = "umap", group.by = "sample", label = FALSE, raster = FALSE, shuffle = TRUE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
DimPlot(obj.m.opossum, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
DimPlot(obj.m.opossum, reduction = "umap", group.by = "predicted.subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.opossum, reduction = "umap", group.by = "type", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

PlotMapping(list(objs.m.mouse[[1]], objs.m.opossum[[1]]), ident.order = c("IT", "L2/3", "L4", "L5IT", "L6IT", "L5NP", "L5PT", "L6CT", "L6b"))
































PlotMapping(list(objs.m.mouse[[2]], objs.m.opossum[[2]]), ident.order = c("Pvalb", "Sst", "Vip", "Lamp5", "Frem1", "Stac", "Meis2"))
































PlotMapping(list(objs.m.mouse[[3]], objs.m.opossum[[3]]), ident.order = c("Astro", "Micro", "OD", "OPC", "Endo", "VLMC"))
































Idents(objs.m.opossum[[1]]) <- "subclass"
levels(objs.m.opossum[[1]]) <- c("IT_A", "IT_B", "IT_C", "IT_D", "IT_E", "L5NP", "L5PT", "L6CT", "L6b")
VlnPlot(objs.m.opossum[[1]], "predicted.subclass.score") + NoLegend()

Idents(objs.m.opossum[[2]]) <- "subclass"
levels(objs.m.opossum[[2]]) <- c("Pvalb", "Sst", "Vip", "Lamp5", "Frem1", "Meis2")
VlnPlot(objs.m.opossum[[2]], "predicted.subclass.score") + theme(legend.spacing.x = unit(2.0, 'cm'))

Idents(objs.m.opossum[[3]]) <- "subclass"
levels(objs.m.opossum[[3]]) <- c("Astro", "Micro", "OD", "OPC", "Endo", "VLMC")
VlnPlot(objs.m.opossum[[3]], "predicted.subclass.score") + theme(legend.spacing.x = unit(2.0, 'cm'))

Idents(obj.m.opossum) <- "subclass"
levels(obj.m.opossum) <- c("IT_A", "IT_B", "IT_C", "IT_D", "IT_E", "L5NP", "L5PT", "L6CT", "L6b",
"Pvalb", "Sst", "Vip", "Lamp5", "Frem1", "Meis2",
"Astro", "Micro", "OD", "OPC", "Endo", "VLMC")
VlnPlot(obj.m.opossum, "predicted.subclass.score") + NoLegend()

saveRDS(obj.mouse, "E:/Transcriptomics_V1/Integration/Opossum_Mouse-Tasic/obj_mouse.rds")
saveRDS(obj.opossum, "E:/Transcriptomics_V1/Integration/Opossum_Mouse-Tasic/obj_opossum.rds")
saveRDS(objs.i.mouse, "E:/Transcriptomics_V1/Integration/Opossum_Mouse-Tasic/obj_i_mouse.rds")
saveRDS(objs.i.opossum, "E:/Transcriptomics_V1/Integration/Opossum_Mouse-Tasic/obj_i_opossum.rds")
saveRDS(objs.m.mouse, "E:/Transcriptomics_V1/Integration/Opossum_Mouse-Tasic/objs_m_mouse.rds")
saveRDS(objs.m.opossum, "E:/Transcriptomics_V1/Integration/Opossum_Mouse-Tasic/objs_m_opossum.rds")
saveRDS(obj.m.mouse, "E:/Transcriptomics_V1/Integration/Opossum_Mouse-Tasic/obj_m_mouse.rds")
saveRDS(obj.m.opossum, "E:/Transcriptomics_V1/Integration/Opossum_Mouse-Tasic/obj_m_opossum.rds")
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCmBgYHtyfQ0KDQpsaWJyYXJ5KFNldXJhdCkNCmxpYnJhcnkoU2V1cmF0RGlzaykNCmxpYnJhcnkocmV0aWN1bGF0ZSkNCmxpYnJhcnkoc2NydWJsZXRSKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShkYXRhLnRhYmxlKQ0KbGlicmFyeShjbHVzdHJlZSkNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShncmlkRXh0cmEpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHBseXIpDQpzb3VyY2UoIkM6L1J5YW4vR2l0SHViL3RyYWNodGVuYmVyZy1sYWIvdHJhbnNjcmlwdG9taWNzL3Rvb2xzL3NldXJhdF9mdW5jdGlvbnMuUiIpDQpzb3VyY2UoIkM6L1J5YW4vR2l0SHViL3RyYWNodGVuYmVyZy1sYWIvdHJhbnNjcmlwdG9taWNzL3Rvb2xzL3NldXJhdF9pbnRlZ3JhdGlvbl9mdW5jdGlvbnMuUiIpDQpzb3VyY2UoIkM6L1J5YW4vR2l0SHViL3RyYWNodGVuYmVyZy1sYWIvdHJhbnNjcmlwdG9taWNzL3hnYm9vc3QveGdib29zdF90cmFpbi5SIikNCnNvdXJjZSgiQzovUnlhbi9HaXRIdWIvdHJhY2h0ZW5iZXJnLWxhYi90cmFuc2NyaXB0b21pY3MveGdib29zdC9wbG90dGluZ0Z4bnMuUiIpDQoNCmNsYXNzZXMgPC0gYygiR2x1dGFtYXRlcmdpYyIsICJHQUJBZXJnaWMiLCAiTm9ubmV1cm9uYWwiKQ0Kb2Jqcy5tb3VzZSA8LSBjKCkNCm9ianMub3Bvc3N1bSA8LSBjKCkNCm9ianMuaS5tb3VzZSA8LSBjKCkNCm9ianMuaS5vcG9zc3VtIDwtIGMoKQ0Kb2Jqcy5tLm1vdXNlIDwtIGMoKQ0Kb2Jqcy5tLm9wb3NzdW0gPC0gYygpDQoNCmZvciAoY2wgaW4gY2xhc3Nlcykgew0KDQogIG9iai5vcG9zc3VtIDwtIHJlYWRSRFMocGFzdGUwKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvT3Bvc3N1bS9zZXVyYXQvb3Bvc3N1bV92MV8iLCB0b2xvd2VyKGNsKSwgIl9wcm9jZXNzZWQucmRzIikpDQogIG9iai5vcG9zc3VtJHNwZWNpZXMgPC0gIk9wb3NzdW0iDQogIG9iai5tb3VzZS5QMzggPC0gcmVhZFJEUyhwYXN0ZTAoIkU6L1RyYW5zY3JpcHRvbWljc19WMS9Nb3VzZS9zZXVyYXQvbW91c2VfdjFfdGFzaWNfIiwgdG9sb3dlcihjbCksICJfcHJvY2Vzc2VkLnJkcyIpKQ0KICBvYmoubW91c2UuUDM4JHNwZWNpZXMgPC0gIk1vdXNlIg0KDQogIG9ianMgPC0gbGlzdChvYmoub3Bvc3N1bSwgb2JqLm1vdXNlLlAzOCkNCiAgb2JqLmludGVncmF0ZWQgPC0gSW50ZWdyYXRlT2JqZWN0cyhvYmpzW1sxXV0sIG9ianNbWzJdXSwgcmVzb2x1dGlvbnMgPSBjKDEsIDIpLCBuZmVhdHVyZXMgPSAzMDAwLCBzdWJzYW1wbGUgPSBUUlVFKQ0KICBvYmpzLmkgPC0gU3BsaXRPYmplY3Qob2JqLmludGVncmF0ZWQsIHNwbGl0LmJ5ID0gInNwZWNpZXMiKQ0KICBvYmpzLm0gPC0gTWFwT2JqZWN0cyhvYmpzLmlbWyJNb3VzZSJdXSwgb2Jqcy5pW1siT3Bvc3N1bSJdXSwgYygic3ViY2xhc3MiLCAidHlwZSIpLCBhc3NheSA9ICJpbnRlZ3JhdGVkIikNCiAgb2Jqcy5tb3VzZSA8LSBhcHBlbmQob2Jqcy5tb3VzZSwgb2Jqc1tbMl1dKQ0KICBvYmpzLm9wb3NzdW0gPC0gYXBwZW5kKG9ianMub3Bvc3N1bSwgb2Jqc1tbMV1dKQ0KICBvYmpzLmkubW91c2UgPC0gYXBwZW5kKG9ianMuaS5tb3VzZSwgb2Jqcy5pW1siTW91c2UiXV0pDQogIG9ianMuaS5vcG9zc3VtIDwtIGFwcGVuZChvYmpzLmkub3Bvc3N1bSwgb2Jqcy5pW1siT3Bvc3N1bSJdXSkNCiAgb2Jqcy5tLm1vdXNlIDwtIGFwcGVuZChvYmpzLm0ubW91c2UsIG9ianMubVtbMl1dKQ0KICBvYmpzLm0ub3Bvc3N1bSA8LSBhcHBlbmQob2Jqcy5tLm9wb3NzdW0sIG9ianMubVtbMV1dKQ0KICANCn0NCg0Kb2JqLm1vdXNlIDwtIG1lcmdlKG9ianMubW91c2VbWzFdXSwgeSA9IGMob2Jqcy5tb3VzZVtbMl1dLCBvYmpzLm1vdXNlW1szXV0pKQ0Kb2JqLm9wb3NzdW0gPC0gbWVyZ2Uob2Jqcy5vcG9zc3VtW1sxXV0sIHkgPSBjKG9ianMub3Bvc3N1bVtbMl1dLCBvYmpzLm9wb3NzdW1bWzNdXSkpDQpvYmoubS5tb3VzZSA8LSBtZXJnZShvYmpzLm0ubW91c2VbWzFdXSwgeSA9IGMob2Jqcy5tLm1vdXNlW1syXV0sIG9ianMubS5tb3VzZVtbM11dKSkNCm9iai5tLm9wb3NzdW0gPC0gbWVyZ2Uob2Jqcy5tLm9wb3NzdW1bWzFdXSwgeSA9IGMob2Jqcy5tLm9wb3NzdW1bWzJdXSwgb2Jqcy5tLm9wb3NzdW1bWzNdXSkpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpvYmoubW91c2UgPC0gQ2x1c3RlclNDVChvYmoubW91c2UsIGMoMSkpDQpvYmoubS5tb3VzZSA8LSBDbHVzdGVyU0NUKG9iai5tLm1vdXNlLCBjKDEpKQ0Kb2JqLm9wb3NzdW0gPC0gQ2x1c3RlclNDVChvYmoub3Bvc3N1bSwgYygxKSkNCm9iai5tLm9wb3NzdW0gPC0gQ2x1c3RlclNDVChvYmoubS5vcG9zc3VtLCBjKDEpKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0Kb2JqLm1vdXNlIDwtIHJlYWRSRFMoIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfbW91c2UucmRzIikNCm9iai5vcG9zc3VtIDwtIHJlYWRSRFMoIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfb3Bvc3N1bS5yZHMiKQ0Kb2Jqcy5pLm1vdXNlIDwtIHJlYWRSRFMoIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfaV9tb3VzZS5yZHMiKQ0Kb2Jqcy5pLm9wb3NzdW0gPC0gcmVhZFJEUygiRTovVHJhbnNjcmlwdG9taWNzX1YxL0ludGVncmF0aW9uL09wb3NzdW1fTW91c2UtUDM4L29ial9pX29wb3NzdW0ucmRzIikNCm9ianMubS5tb3VzZSA8LSByZWFkUkRTKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1QMzgvb2Jqc19tX21vdXNlLnJkcyIpDQpvYmpzLm0ub3Bvc3N1bSA8LSByZWFkUkRTKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1QMzgvb2Jqc19tX29wb3NzdW0ucmRzIikNCm9iai5tLm1vdXNlIDwtIHJlYWRSRFMoIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfbV9tb3VzZS5yZHMiKQ0Kb2JqLm0ub3Bvc3N1bSA8LSByZWFkUkRTKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1QMzgvb2JqX21fb3Bvc3N1bS5yZHMiKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KRGltUGxvdChvYmoubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic2FtcGxlIiwgbGFiZWwgPSBGQUxTRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KRGltUGxvdChvYmoubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpEaW1QbG90KG9iai5tb3VzZSwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJ0eXBlIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KDQpvYmoubW91c2Ukc3ViY2xhc3MuSVQgPC0gb2JqLm1vdXNlJHN1YmNsYXNzDQpvYmoubW91c2Ukc3ViY2xhc3MuSVRbb2JqLm1vdXNlJHN1YmNsYXNzICVpbiUgYygiTDIvMyIsICJMNCIsICJMNUlUIiwgIkw2SVQiKV0gPC0gICJJVCINCnAgPC0gRGltUGxvdChvYmoubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvTW91c2UtUDM4X1YxX0FsbF9VTUFQX1N1YmNsYXNzX0Z1bGxTcGFjZS5wbmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL01vdXNlLVAzOF9WMV9BbGxfVU1BUF9TdWJjbGFzc19GdWxsU3BhY2Uuc3ZnIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCnAgPC0gRGltUGxvdChvYmoubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MuSVQiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvTW91c2UtUDM4X1YxX0FsbF9VTUFQX1N1YmNsYXNzSVRfRnVsbFNwYWNlLnBuZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvTW91c2UtUDM4X1YxX0FsbF9VTUFQX1N1YmNsYXNzSVRfRnVsbFNwYWNlLnN2ZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpEaW1QbG90KG9iai5tLm1vdXNlLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInNhbXBsZSIsIGxhYmVsID0gRkFMU0UsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCkRpbVBsb3Qob2JqLm0ubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpEaW1QbG90KG9iai5tLm1vdXNlLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5zdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCkRpbVBsb3Qob2JqLm0ubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAidHlwZSIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCg0KcCA8LSBEaW1QbG90KG9iai5tLm1vdXNlLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInN1YmNsYXNzIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL01vdXNlLVAzOF9WMV9BbGxfVU1BUF9TdWJjbGFzc19JbnRTcGFjZS5zdmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL01vdXNlLVAzOF9WMV9BbGxfVU1BUF9TdWJjbGFzc19JbnRTcGFjZS5wbmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KcCA8LSBEaW1QbG90KG9iai5tLm1vdXNlLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5zdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9Nb3VzZS1QMzhfVjFfQWxsX1VNQVBfUHJlZGljdGVkU3ViY2xhc3NfSW50U3BhY2Uuc3ZnIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9Nb3VzZS1QMzhfVjFfQWxsX1VNQVBfUHJlZGljdGVkU3ViY2xhc3NfSW50U3BhY2UucG5nIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCg0KYGBgDQoNCg0KYGBge3J9DQoNCkRpbVBsb3Qob2JqLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic2FtcGxlIiwgbGFiZWwgPSBGQUxTRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KRGltUGxvdChvYmoub3Bvc3N1bSwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJzdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCkRpbVBsb3Qob2JqLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAidHlwZSIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCg0Kb2JqLm9wb3NzdW0kc3ViY2xhc3MuSVQgPC0gb2JqLm9wb3NzdW0kc3ViY2xhc3MNCm9iai5vcG9zc3VtJHN1YmNsYXNzLklUW29iai5vcG9zc3VtJHN1YmNsYXNzICVpbiUgYygiSVRfQSIsICJJVF9CIiwgIklUX0MiLCAiSVRfRCIsICJJVF9FIildIDwtICAiSVQiDQpwIDwtIERpbVBsb3Qob2JqLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvT3Bvc3N1bV9WMV9BbGxfVU1BUF9TdWJjbGFzc19GdWxsU3BhY2UucG5nIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9PcG9zc3VtX1YxX0FsbF9VTUFQX1N1YmNsYXNzX0Z1bGxTcGFjZS5zdmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KcCA8LSBEaW1QbG90KG9iai5vcG9zc3VtLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInN1YmNsYXNzLklUIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL09wb3NzdW1fVjFfQWxsX1VNQVBfU3ViY2xhc3NJVF9GdWxsU3BhY2UucG5nIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9PcG9zc3VtX1YxX0FsbF9VTUFQX1N1YmNsYXNzSVRfRnVsbFNwYWNlLnN2ZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpEaW1QbG90KG9iai5tLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic2FtcGxlIiwgbGFiZWwgPSBGQUxTRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KRGltUGxvdChvYmoubS5vcG9zc3VtLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInN1YmNsYXNzIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KRGltUGxvdChvYmoubS5vcG9zc3VtLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5zdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCkRpbVBsb3Qob2JqLm0ub3Bvc3N1bSwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJ0eXBlIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KDQpwIDwtIERpbVBsb3Qob2JqLm0ub3Bvc3N1bSwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJzdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9PcG9zc3VtX1YxX0FsbF9VTUFQX1N1YmNsYXNzX0ludFNwYWNlLnN2ZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvT3Bvc3N1bV9WMV9BbGxfVU1BUF9TdWJjbGFzc19JbnRTcGFjZS5wbmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KcCA8LSBEaW1QbG90KG9iai5tLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLnN1YmNsYXNzIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL09wb3NzdW1fVjFfQWxsX1VNQVBfUHJlZGljdGVkU3ViY2xhc3NfSW50U3BhY2Uuc3ZnIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9PcG9zc3VtX1YxX0FsbF9VTUFQX1ByZWRpY3RlZFN1YmNsYXNzX0ludFNwYWNlLnBuZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpQbG90TWFwcGluZyhsaXN0KG9ianMubS5tb3VzZVtbMV1dLCBvYmpzLm0ub3Bvc3N1bVtbMV1dKSwgaWRlbnQub3JkZXIgPSBjKCJJVCIsICJMMi8zIiwgIkw0IiwgIkw1SVQiLCAiTDZJVCIsICJMNU5QIiwgIkw1UFQiLCAiTDZDVCIsICJMNmIiKSkNCg0KYGBgDQoNCg0KYGBge3J9DQoNClBsb3RNYXBwaW5nKGxpc3Qob2Jqcy5tLm1vdXNlW1syXV0sIG9ianMubS5vcG9zc3VtW1syXV0pLCBpZGVudC5vcmRlciA9IGMoIlB2YWxiIiwgIlNzdCIsICJWaXAiLCAiTGFtcDUiLCAiRnJlbTEiLCAiU3RhYyIsICJNZWlzMiIpKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KUGxvdE1hcHBpbmcobGlzdChvYmpzLm0ubW91c2VbWzNdXSwgb2Jqcy5tLm9wb3NzdW1bWzNdXSksIGlkZW50Lm9yZGVyID0gYygiQXN0cm8iLCAiTWljcm8iLCAiT0QiLCAiT1BDIiwgIkVuZG8iLCAiVkxNQyIpKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KSWRlbnRzKG9ianMubS5vcG9zc3VtW1sxXV0pIDwtICJzdWJjbGFzcyINCmxldmVscyhvYmpzLm0ub3Bvc3N1bVtbMV1dKSA8LSBjKCJJVF9BIiwgIklUX0IiLCAiSVRfQyIsICJJVF9EIiwgIklUX0UiLCAiTDVOUCIsICJMNVBUIiwgIkw2Q1QiLCAiTDZiIikNClZsblBsb3Qob2Jqcy5tLm9wb3NzdW1bWzFdXSwgInByZWRpY3RlZC5zdWJjbGFzcy5zY29yZSIpICsgTm9MZWdlbmQoKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KSWRlbnRzKG9ianMubS5vcG9zc3VtW1syXV0pIDwtICJzdWJjbGFzcyINCmxldmVscyhvYmpzLm0ub3Bvc3N1bVtbMl1dKSA8LSBjKCJQdmFsYiIsICJTc3QiLCAiVmlwIiwgIkxhbXA1IiwgIkZyZW0xIiwgIk1laXMyIikNClZsblBsb3Qob2Jqcy5tLm9wb3NzdW1bWzJdXSwgInByZWRpY3RlZC5zdWJjbGFzcy5zY29yZSIpICsgdGhlbWUobGVnZW5kLnNwYWNpbmcueCA9IHVuaXQoMi4wLCAnY20nKSkNCg0KYGBgDQoNCg0KYGBge3J9DQoNCklkZW50cyhvYmpzLm0ub3Bvc3N1bVtbM11dKSA8LSAic3ViY2xhc3MiDQpsZXZlbHMob2Jqcy5tLm9wb3NzdW1bWzNdXSkgPC0gYygiQXN0cm8iLCAiTWljcm8iLCAiT0QiLCAiT1BDIiwgIkVuZG8iLCAiVkxNQyIpDQpWbG5QbG90KG9ianMubS5vcG9zc3VtW1szXV0sICJwcmVkaWN0ZWQuc3ViY2xhc3Muc2NvcmUiKSArIHRoZW1lKGxlZ2VuZC5zcGFjaW5nLnggPSB1bml0KDIuMCwgJ2NtJykpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpJZGVudHMob2JqLm0ub3Bvc3N1bSkgPC0gInN1YmNsYXNzIg0KbGV2ZWxzKG9iai5tLm9wb3NzdW0pIDwtIGMoIklUX0EiLCAiSVRfQiIsICJJVF9DIiwgIklUX0QiLCAiSVRfRSIsICJMNU5QIiwgIkw1UFQiLCAiTDZDVCIsICJMNmIiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHZhbGIiLCAiU3N0IiwgIlZpcCIsICJMYW1wNSIsICJGcmVtMSIsICJNZWlzMiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc3RybyIsICJNaWNybyIsICJPRCIsICJPUEMiLCAiRW5kbyIsICJWTE1DIikNClZsblBsb3Qob2JqLm0ub3Bvc3N1bSwgInByZWRpY3RlZC5zdWJjbGFzcy5zY29yZSIpICsgTm9MZWdlbmQoKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0Kc2F2ZVJEUyhvYmoubW91c2UsICJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1UYXNpYy9vYmpfbW91c2UucmRzIikNCnNhdmVSRFMob2JqLm9wb3NzdW0sICJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1UYXNpYy9vYmpfb3Bvc3N1bS5yZHMiKQ0Kc2F2ZVJEUyhvYmpzLmkubW91c2UsICJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1UYXNpYy9vYmpfaV9tb3VzZS5yZHMiKQ0Kc2F2ZVJEUyhvYmpzLmkub3Bvc3N1bSwgIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVRhc2ljL29ial9pX29wb3NzdW0ucmRzIikNCnNhdmVSRFMob2Jqcy5tLm1vdXNlLCAiRTovVHJhbnNjcmlwdG9taWNzX1YxL0ludGVncmF0aW9uL09wb3NzdW1fTW91c2UtVGFzaWMvb2Jqc19tX21vdXNlLnJkcyIpDQpzYXZlUkRTKG9ianMubS5vcG9zc3VtLCAiRTovVHJhbnNjcmlwdG9taWNzX1YxL0ludGVncmF0aW9uL09wb3NzdW1fTW91c2UtVGFzaWMvb2Jqc19tX29wb3NzdW0ucmRzIikNCnNhdmVSRFMob2JqLm0ubW91c2UsICJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1UYXNpYy9vYmpfbV9tb3VzZS5yZHMiKQ0Kc2F2ZVJEUyhvYmoubS5vcG9zc3VtLCAiRTovVHJhbnNjcmlwdG9taWNzX1YxL0ludGVncmF0aW9uL09wb3NzdW1fTW91c2UtVGFzaWMvb2JqX21fb3Bvc3N1bS5yZHMiKQ0KDQpgYGANCg0K